package controlador;
import java.util.Vector;

import modelo.CajaAhorro;
import modelo.CajaAhorroDTO;
import modelo.Cliente;
import modelo.ClienteDTO;
import modelo.Cuenta;
import modelo.CuentaCorriente;
import modelo.CuentaCorrienteDTO;

public class Banco {
        private Vector<Cuenta> cuentas;
        private Vector<Cliente> clientes;
        
        public Banco(){
                this.cuentas = new Vector<Cuenta>();
                this.clientes = new Vector<Cliente>();
                crearCliente("Emiliano","Martin",30537638,"Medrano 305","06/11/1983");
                crearCliente("Mercedes","Alvarez",11587895,"Medrano 305","15/09/1955");
                crearCliente("Marta","Alvare",10200191,"Medrano 305","11/11/1951");
                crearCuentaCorriente(10200191, 300);
                
        }

        public CajaAhorroDTO crearCajaAhorro(int dni,float interes) {
                Cliente cli=buscarCliente(dni);
                if(cli!=null){
                	CajaAhorro c = new CajaAhorro(cli,interes);
                	cuentas.addElement(c);
                	return c.crearCajaAhorroDTO();
                }
				return null;
        }

        public CuentaCorrienteDTO crearCuentaCorriente(int dni,float descubierto) {
        		Cliente cli= buscarCliente(dni);
        		if(cli!=null){
        			CuentaCorriente c = new CuentaCorriente(cli,descubierto);
        			cuentas.addElement(c);
        			return c.crearCuentaDTO();
        		}
        	return null;
        }

        public float depositar(int nroCta, float monto) {
        		Cuenta c=buscarCuentaID(nroCta);        		
        		if(c!=null){
        			c.depositar(monto); 
        			c.crearMovimiento(monto,"DEPOSITO");
        			return c.getSaldo();
        		}
				return monto;
        }

        private Cuenta buscarCuentaID(int nroCta) {
        	for(int i=0;i<cuentas.size();i++){
                if(cuentas.elementAt(i).sosCuentaID(nroCta)){
                        return cuentas.elementAt(i);
                }
        }
        return null;
		}

		public Cuenta buscarCuenta(int dni) {
                for(int i=0;i<cuentas.size();i++){
                        if(cuentas.elementAt(i).sosCuenta(dni)){
                                return cuentas.elementAt(i);
                        }
                }
                return null;
        }

        public void extraer(int nroCta,float monto) {
                Cuenta c = buscarCuentaID(nroCta);
                if(c!=null){
                	if(c.extraer(monto)){
                        c.crearMovimiento(monto,"EXTRACCION");
                	}
                }
        }

        public ClienteDTO crearCliente(String nombre, String apellido, int dni, String dom, String fechaNac) {
                Cliente c=buscarCliente(dni);
                if(c==null){
                        c=new Cliente(nombre,apellido,dni,dom,fechaNac);
                        clientes.add(c);
                        return c.crearClienteDTO();
                }
                return null;
        }

        public Cliente buscarCliente(int dni) {
                for(int i=0;i<clientes.size();i++){
                        if(clientes.elementAt(i).sosCliente(dni)){
                                return clientes.elementAt(i);
                        }
                }
                return null;
        }
}